package pruebas;

import modelo.Tablero;
import modelo.Posicion;

import junit.framework.TestCase;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;

import excepciones.TableroIndiceFueraDeRangoExcepcion;

public class TableroTest extends TestCase {
	private Tablero tablero;
	
	@Before
	public void setUp() throws Exception {
		super.setUp();
		// Por defecto, el tablero tiene 10 filas y 10 columnas.
		this.tablero = new Tablero();
	}
	
	@After
	public void tearDown() throws Exception {
		super.tearDown();
		this.tablero = null;
	}
		
	@Test
	public void testObtenerPosicionValida() {
		Posicion posicion = null;
		
		try {
			posicion = tablero.getPosicion(1, 1);
		}
		catch (TableroIndiceFueraDeRangoExcepcion e) {
			e.printStackTrace();
		}
		assertNotNull("ERROR: La posicion es nula.", posicion);
	}
	
	@Test
	public void testObtenerPosicionConFilaInvalida() {
		try {
			tablero.getPosicion(-897, 1);
			fail("ERROR: No se lanza la excepcion.");
		}
		catch (TableroIndiceFueraDeRangoExcepcion e) {
			// OK.
		}
	}
	
	public void testObtenerPosicionConColumnaInvalida() {
		try {
			tablero.getPosicion(7, 879);
			fail("ERROR: No se lanza la excepcion.");
		}
		catch (TableroIndiceFueraDeRangoExcepcion e) {
			// OK.
		}
	}
	
	@Test
	public void testObtenerPosicionConFilaYColumnaInvalida() {
		try {
			tablero.getPosicion(-10, 100);
			fail("ERROR: No se lanza la excepcion.");
		}
		catch (TableroIndiceFueraDeRangoExcepcion e) {
			// OK.
		}
	}
	
	@Test
	public void testCrearTableroConTamanioInvalido() {
		try {
			this.tablero = new Tablero(-10, 3);
			fail("ERROR: No se lanza la excepcion.");
		}
		catch (TableroIndiceFueraDeRangoExcepcion e) {
			// OK.
		}
	}
}
